Generated by Cython 3.0.2
Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.
Raw output: sr_radial_gradient_convergence.c
+001: # cython: infer_types=True, wraparound=False, nonecheck=False, boundscheck=False, cdivision=True, language_level=3, profile=False, autogen_pxd=False
__pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_4) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
002:
003: from libc.math cimport sqrt, fabs, exp, isnan, floor, pow
004:
005: from ..transform.interpolation_catmull_rom cimport _interpolate, Interpolator
+006: from ..transform.image_magnify import cv2_zoom as zoom
__pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_cv2_zoom); __Pyx_GIVEREF(__pyx_n_s_cv2_zoom); if (__Pyx_PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_cv2_zoom)) __PYX_ERR(0, 6, __pyx_L1_error); __pyx_t_4 = __Pyx_Import(__pyx_n_s_transform_image_magnify, __pyx_t_7, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_cv2_zoom); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_zoom, __pyx_t_7) < 0) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
007: # from ..transform.image_magnify import fourier_zoom as zoom
+008: from ..utils.timeit import timeit2
__pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_timeit2); __Pyx_GIVEREF(__pyx_n_s_timeit2); if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_timeit2)) __PYX_ERR(0, 8, __pyx_L1_error); __pyx_t_7 = __Pyx_Import(__pyx_n_s_utils_timeit, __pyx_t_4, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_timeit2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_timeit2, __pyx_t_4) < 0) __PYX_ERR(0, 8, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+009: from ..transform.interpolation_fft_zoom import magnify as fft_zoom
__pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_magnify); __Pyx_GIVEREF(__pyx_n_s_magnify); if (__Pyx_PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_magnify)) __PYX_ERR(0, 9, __pyx_L1_error); __pyx_t_4 = __Pyx_Import(__pyx_n_s_transform_interpolation_fft_zoom, __pyx_t_7, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_magnify); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_fft_zoom, __pyx_t_7) < 0) __PYX_ERR(0, 9, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+010: from nanopyx.liquid import CRShiftAndMagnify
__pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_CRShiftAndMagnify); __Pyx_GIVEREF(__pyx_n_s_CRShiftAndMagnify); if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_CRShiftAndMagnify)) __PYX_ERR(0, 10, __pyx_L1_error); __pyx_t_7 = __Pyx_Import(__pyx_n_s_nanopyx_liquid, __pyx_t_4, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_CRShiftAndMagnify); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_CRShiftAndMagnify, __pyx_t_4) < 0) __PYX_ERR(0, 10, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
011:
012:
+013: import numpy as np
__pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_7) < 0) __PYX_ERR(0, 13, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
014: cimport numpy as np
015:
016: from cython.parallel import prange
017:
+018: cdef float Gx_Gy_MAGNIFICATION = 2.0
__pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION = 2.0;
019:
+020: cdef class RadialGradientConvergence:
struct __pyx_vtabstruct_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence {
void (*_single_frame_RGC_map)(struct __pyx_obj_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
float (*_calculateRGC)(struct __pyx_obj_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence *, int, int, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice);
};
static struct __pyx_vtabstruct_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence *__pyx_vtabptr_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence;
021:
022: # autogen_pxd: cdef int magnification
023: # autogen_pxd: cdef float fwhm
024: # autogen_pxd: cdef float sensitivity
025: # autogen_pxd: cdef float tSS # two sigma squared
026: # autogen_pxd: cdef float tSO # two sigma plus one
027: # autogen_pxd: cdef bint doIntensityWeighting
028:
029:
+030: def __init__(self, magnification: int = 5, radius: float = 1.5, sensitivity: float = 1 , doIntensityWeighting: bool = True):
/* Python wrapper */ static int __pyx_pw_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ PyDoc_STRVAR(__pyx_doc_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence___init__, "\n Calculate the Radial Gradient Convergence (RGC) of an image.\n :param magnification: magnification of the image\n :param radius: radius of the RGC (the PSF Full-Width-Half-Maximum)\n :param sensitivity: sensitivity of the RGC (sharpening factor)\n :param doIntensityWeighting: whether to do intensity weighting\n "); #if CYTHON_UPDATE_DESCRIPTOR_DOC struct wrapperbase __pyx_wrapperbase_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence___init__; #endif static int __pyx_pw_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_magnification = 0; double __pyx_v_radius; double __pyx_v_sensitivity; PyObject *__pyx_v_doIntensityWeighting = 0; CYTHON_UNUSED Py_ssize_t __pyx_nargs; CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely((__pyx_nargs < 0))) __PYX_ERR(0, 30, __pyx_L3_error) #endif __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); { PyObject **__pyx_pyargnames[] = {&__pyx_n_s_magnification,&__pyx_n_s_radius,&__pyx_n_s_sensitivity,&__pyx_n_s_doIntensityWeighting,0}; PyObject* values[4] = {0,0,0,0}; values[0] = __Pyx_Arg_NewRef_VARARGS(__pyx_k__11); values[3] = __Pyx_Arg_NewRef_VARARGS(((PyObject *)Py_True)); if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); switch (__pyx_nargs) { case 0: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_magnification); if (value) { values[0] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 1: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_radius); if (value) { values[1] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sensitivity); if (value) { values[2] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_doIntensityWeighting); if (value) { values[3] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 30, __pyx_L3_error) } } else { switch (__pyx_nargs) { case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_magnification = ((PyObject*)values[0]); if (values[1]) { __pyx_v_radius = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_radius == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error) } else { __pyx_v_radius = ((double)1.5); } if (values[2]) { __pyx_v_sensitivity = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_sensitivity == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L3_error) } else { __pyx_v_sensitivity = ((double)1.0); } __pyx_v_doIntensityWeighting = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 4, __pyx_nargs); __PYX_ERR(0, 30, __pyx_L3_error) goto __pyx_L3_error; __pyx_L3_error:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); } } __Pyx_AddTraceback("nanopyx.core.transform.sr_radial_gradient_convergence.RadialGradientConvergence.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_magnification), (&PyInt_Type), 0, "magnification", 1))) __PYX_ERR(0, 30, __pyx_L1_error) __pyx_r = __pyx_pf_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence___init__(((struct __pyx_obj_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence *)__pyx_v_self), __pyx_v_magnification, __pyx_v_radius, __pyx_v_sensitivity, __pyx_v_doIntensityWeighting); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = -1; __pyx_L0:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); } } __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_pf_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence___init__(struct __pyx_obj_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence *__pyx_v_self, PyObject *__pyx_v_magnification, double __pyx_v_radius, double __pyx_v_sensitivity, PyObject *__pyx_v_doIntensityWeighting) { float __pyx_v_sigma; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__", 0); /* … */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("nanopyx.core.transform.sr_radial_gradient_convergence.RadialGradientConvergence.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_int_5)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_int_5))) __PYX_ERR(0, 30, __pyx_L1_error) __Pyx_INCREF(__pyx_int_5); __pyx_k__11 = ((PyObject*)__pyx_int_5); __Pyx_GIVEREF(__pyx_int_5);
031: """
032: Calculate the Radial Gradient Convergence (RGC) of an image.
033: :param magnification: magnification of the image
034: :param radius: radius of the RGC (the PSF Full-Width-Half-Maximum)
035: :param sensitivity: sensitivity of the RGC (sharpening factor)
036: :param doIntensityWeighting: whether to do intensity weighting
037: """
+038: self.magnification = magnification
__pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_magnification); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 38, __pyx_L1_error) __pyx_v_self->magnification = __pyx_t_1;
+039: self.fwhm = radius
__pyx_v_self->fwhm = __pyx_v_radius;
+040: self.sensitivity = sensitivity
__pyx_v_self->sensitivity = __pyx_v_sensitivity;
+041: self.doIntensityWeighting = doIntensityWeighting
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_doIntensityWeighting); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 41, __pyx_L1_error) __pyx_v_self->doIntensityWeighting = __pyx_t_2;
042:
+043: cdef float sigma = radius / 2.355
__pyx_v_sigma = (__pyx_v_radius / 2.355);
+044: self.tSS = 2 * sigma * sigma
__pyx_v_self->tSS = ((2.0 * __pyx_v_sigma) * __pyx_v_sigma);
+045: self.tSO = 2 * sigma + 1
__pyx_v_self->tSO = ((2.0 * __pyx_v_sigma) + 1.0);
046:
+047: @timeit2
/* Python wrapper */ static PyObject *__pyx_pw_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence_3calculate(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence_2calculate, "\n Calculate the RGC of an image-stack.\n :param im: the image to calculate the RGC of\n :return: the RGC of the image\n "); static PyMethodDef __pyx_mdef_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence_3calculate = {"calculate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence_3calculate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence_2calculate}; static PyObject *__pyx_pw_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence_3calculate(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyArrayObject *__pyx_v_im = 0; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("calculate (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely((__pyx_nargs < 0))) __PYX_ERR(0, 47, __pyx_L3_error) #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject **__pyx_pyargnames[] = {&__pyx_n_s_im,0}; PyObject* values[1] = {0}; if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); switch (__pyx_nargs) { case 0: if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_im)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 47, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "calculate") < 0)) __PYX_ERR(0, 47, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); } __pyx_v_im = ((PyArrayObject *)values[0]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("calculate", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 47, __pyx_L3_error) goto __pyx_L3_error; __pyx_L3_error:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_AddTraceback("nanopyx.core.transform.sr_radial_gradient_convergence.RadialGradientConvergence.calculate", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_im), __pyx_ptype_5numpy_ndarray, 0, "im", 0))) __PYX_ERR(0, 48, __pyx_L1_error) __pyx_r = __pyx_pf_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence_2calculate(((struct __pyx_obj_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence *)__pyx_v_self), __pyx_v_im); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence_2calculate(struct __pyx_obj_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence *__pyx_v_self, PyArrayObject *__pyx_v_im) { npy_intp __pyx_v_nFrames; __Pyx_memviewslice __pyx_v_imRaw = { 0, 0, { 0 }, { 0 }, { 0 } }; PyObject *__pyx_v_crsm = NULL; __Pyx_memviewslice __pyx_v_imInt = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_imGx = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_imGy = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_n; __Pyx_memviewslice __pyx_v_imIntGx = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_imIntGy = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_imRad = { 0, 0, { 0 }, { 0 }, { 0 } }; int __pyx_v_p; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("calculate", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __PYX_XCLEAR_MEMVIEW(&__pyx_t_8, 1); __Pyx_XDECREF(__pyx_t_9); __PYX_XCLEAR_MEMVIEW(&__pyx_t_22, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_23, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_24, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_25, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_26, 1); __Pyx_AddTraceback("nanopyx.core.transform.sr_radial_gradient_convergence.RadialGradientConvergence.calculate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __PYX_XCLEAR_MEMVIEW(&__pyx_v_imRaw, 1); __Pyx_XDECREF(__pyx_v_crsm); __PYX_XCLEAR_MEMVIEW(&__pyx_v_imInt, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_imGx, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_imGy, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_imIntGx, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_imIntGy, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v_imRad, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__24 = PyTuple_Pack(13, __pyx_n_s_self, __pyx_n_s_im, __pyx_n_s_nFrames, __pyx_n_s_imRaw, __pyx_n_s_crsm, __pyx_n_s_imInt, __pyx_n_s_imGx, __pyx_n_s_imGy, __pyx_n_s_n, __pyx_n_s_imIntGx, __pyx_n_s_imIntGy, __pyx_n_s_imRad, __pyx_n_s_p); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 47, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__24); __Pyx_GIVEREF(__pyx_tuple__24); /* … */ __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 47, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_im, __pyx_kp_s_np_ndarray) < 0) __PYX_ERR(0, 47, __pyx_L1_error) __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence_3calculate, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_RadialGradientConvergence_calcul, NULL, __pyx_n_s_nanopyx_core_transform_sr_radial, __pyx_d, ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 47, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_7); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence, __pyx_n_s_calculate, __pyx_t_4) < 0) __PYX_ERR(0, 47, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; PyType_Modified(__pyx_ptype_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_timeit2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 47, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GetNameInClass(__pyx_t_5, (PyObject *)__pyx_ptype_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence, __pyx_n_s_calculate); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 47, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = NULL; __pyx_t_10 = 0; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); if (likely(__pyx_t_9)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_7, function); __pyx_t_10 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_5}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 47, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence, __pyx_n_s_calculate, __pyx_t_4) < 0) __PYX_ERR(0, 47, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; PyType_Modified(__pyx_ptype_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence); __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__24, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_nanopyx_core_transform_sr_ra, __pyx_n_s_calculate, 47, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) __PYX_ERR(0, 47, __pyx_L1_error)
048: def calculate(self, im: np.ndarray):
049: """
050: Calculate the RGC of an image-stack.
051: :param im: the image to calculate the RGC of
052: :return: the RGC of the image
053: """
+054: assert im.ndim == 3
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(__pyx_assertions_enabled())) {
__pyx_t_1 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_im); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 == 3);
if (unlikely(!__pyx_t_2)) {
__Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0);
__PYX_ERR(0, 54, __pyx_L1_error)
}
}
#else
if ((1)); else __PYX_ERR(0, 54, __pyx_L1_error)
#endif
055:
+056: nFrames = im.shape[0]
__pyx_t_3 = __pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_im); if (unlikely(__pyx_t_3 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L1_error) __pyx_v_nFrames = (__pyx_t_3[0]);
057:
+058: cdef float [:,:,:] imRaw = im.astype(np.float32, copy=False)
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_im), __pyx_n_s_astype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 58, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_float32); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 58, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_6); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6)) __PYX_ERR(0, 58, __pyx_L1_error); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 58, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_copy, Py_False) < 0) __PYX_ERR(0, 58, __pyx_L1_error) __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 58, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 58, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_imRaw = __pyx_t_8; __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
059:
060: # Interpolate the image stack for intensity weighting
+061: crsm = CRShiftAndMagnify()
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CRShiftAndMagnify); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = NULL; __pyx_t_1 = 0; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); __pyx_t_1 = 1; } } #endif { PyObject *__pyx_callargs[1] = {__pyx_t_5, }; __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_1, 0+__pyx_t_1); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __pyx_v_crsm = __pyx_t_7; __pyx_t_7 = 0;
+062: cdef float [:,:,:] imInt = crsm.run(imRaw, 0, 0, self.magnification, self.magnification, run_type="Threaded")
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_crsm, __pyx_n_s_run); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_imRaw, 3, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_self->magnification); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->magnification); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = PyTuple_New(5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_6); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error); __Pyx_INCREF(__pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_int_0)) __PYX_ERR(0, 62, __pyx_L1_error); __Pyx_INCREF(__pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_int_0)) __PYX_ERR(0, 62, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_5); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 4, __pyx_t_4)) __PYX_ERR(0, 62, __pyx_L1_error); __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_run_type, __pyx_n_u_Threaded) < 0) __PYX_ERR(0, 62, __pyx_L1_error) __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_imInt = __pyx_t_8; __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
063:
064: # Calculate intensity gradients of the Raw image
+065: cdef float [:,:,:] imGx = np.zeros_like(imRaw)
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_imRaw, 3, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = NULL; __pyx_t_1 = 0; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_9))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9); if (likely(__pyx_t_7)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_9, function); __pyx_t_1 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_4}; __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_1, 1+__pyx_t_1); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_imGx = __pyx_t_8; __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
+066: cdef float [:,:,:] imGy = np.zeros_like(imRaw)
__Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __pyx_memoryview_fromslice(__pyx_v_imRaw, 3, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = NULL; __pyx_t_1 = 0; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_7)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); __pyx_t_1 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_9}; __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_1, 1+__pyx_t_1); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_imGy = __pyx_t_8; __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
067:
068: cdef int n
+069: with nogil: # will change this soon (to go under single_frame_RGC_map)
{
#ifdef WITH_THREAD
PyThreadState *_save;
_save = NULL;
Py_UNBLOCK_THREADS
__Pyx_FastGIL_Remember();
#endif
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
#ifdef WITH_THREAD
__Pyx_FastGIL_Forget();
Py_BLOCK_THREADS
#endif
goto __pyx_L5;
}
__pyx_L5:;
}
}
+070: for n in prange(nFrames):
__pyx_t_10 = __pyx_v_nFrames;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_12 = (__pyx_t_10 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_12 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_n) lastprivate(__pyx_v_n)
#endif /* _OPENMP */
for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_12; __pyx_t_11++){
{
__pyx_v_n = (int)(0 + 1 * __pyx_t_11);
+071: _c_gradient_roberts_cross(&imRaw[n,0,0], &imGx[n,0,0], &imGy[n,0,0], imRaw.shape[1], imRaw.shape[2])
__pyx_t_13 = __pyx_v_n;
__pyx_t_14 = 0;
__pyx_t_15 = 0;
__pyx_t_16 = __pyx_v_n;
__pyx_t_17 = 0;
__pyx_t_18 = 0;
__pyx_t_19 = __pyx_v_n;
__pyx_t_20 = 0;
__pyx_t_21 = 0;
_c_gradient_roberts_cross((&(*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imRaw.data + __pyx_t_13 * __pyx_v_imRaw.strides[0]) ) + __pyx_t_14 * __pyx_v_imRaw.strides[1]) ) + __pyx_t_15 * __pyx_v_imRaw.strides[2]) )))), (&(*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imGx.data + __pyx_t_16 * __pyx_v_imGx.strides[0]) ) + __pyx_t_17 * __pyx_v_imGx.strides[1]) ) + __pyx_t_18 * __pyx_v_imGx.strides[2]) )))), (&(*((float *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imGy.data + __pyx_t_19 * __pyx_v_imGy.strides[0]) ) + __pyx_t_20 * __pyx_v_imGy.strides[1]) ) + __pyx_t_21 * __pyx_v_imGy.strides[2]) )))), (__pyx_v_imRaw.shape[1]), (__pyx_v_imRaw.shape[2]));
}
}
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
072:
073: # Interpolate the Gradients
+074: cdef float [:,:,:] imIntGx = crsm.run(imGx, 0, 0, self.magnification*Gx_Gy_MAGNIFICATION, self.magnification*Gx_Gy_MAGNIFICATION, run_type="Threaded_guided")
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_crsm, __pyx_n_s_run); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_imGx, 3, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = PyFloat_FromDouble((__pyx_v_self->magnification * __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = PyFloat_FromDouble((__pyx_v_self->magnification * __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyTuple_New(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4)) __PYX_ERR(0, 74, __pyx_L1_error); __Pyx_INCREF(__pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_0)) __PYX_ERR(0, 74, __pyx_L1_error); __Pyx_INCREF(__pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_int_0)) __PYX_ERR(0, 74, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_9); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_9)) __PYX_ERR(0, 74, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 4, __pyx_t_7)) __PYX_ERR(0, 74, __pyx_L1_error); __pyx_t_4 = 0; __pyx_t_9 = 0; __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_run_type, __pyx_n_u_Threaded_guided) < 0) __PYX_ERR(0, 74, __pyx_L1_error) __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 74, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_t_9, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 74, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_v_imIntGx = __pyx_t_8; __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
+075: cdef float [:,:,:] imIntGy = crsm.run(imGy, 0, 0, self.magnification*Gx_Gy_MAGNIFICATION, self.magnification*Gx_Gy_MAGNIFICATION, run_type="Threaded_guided")
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_crsm, __pyx_n_s_run); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_imGy, 3, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyFloat_FromDouble((__pyx_v_self->magnification * __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyFloat_FromDouble((__pyx_v_self->magnification * __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7)) __PYX_ERR(0, 75, __pyx_L1_error); __Pyx_INCREF(__pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_0)) __PYX_ERR(0, 75, __pyx_L1_error); __Pyx_INCREF(__pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_int_0)) __PYX_ERR(0, 75, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_6); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_6)) __PYX_ERR(0, 75, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_5); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_t_5)) __PYX_ERR(0, 75, __pyx_L1_error); __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_run_type, __pyx_n_u_Threaded_guided) < 0) __PYX_ERR(0, 75, __pyx_L1_error) __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_t_6, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_imIntGy = __pyx_t_8; __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
076:
+077: cdef float [:,:,:] imRad = np.zeros((im.shape[0], im.shape[1]*self.magnification, im.shape[2]*self.magnification), dtype=np.float32)
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_3 = __pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_im); if (unlikely(__pyx_t_3 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 77, __pyx_L1_error) __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_im); if (unlikely(__pyx_t_3 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 77, __pyx_L1_error) __pyx_t_4 = PyInt_FromSsize_t(((__pyx_t_3[1]) * __pyx_v_self->magnification)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_im); if (unlikely(__pyx_t_3 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 77, __pyx_L1_error) __pyx_t_9 = PyInt_FromSsize_t(((__pyx_t_3[2]) * __pyx_v_self->magnification)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_6); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6)) __PYX_ERR(0, 77, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4)) __PYX_ERR(0, 77, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_9); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_9)) __PYX_ERR(0, 77, __pyx_L1_error); __pyx_t_6 = 0; __pyx_t_4 = 0; __pyx_t_9 = 0; __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7)) __PYX_ERR(0, 77, __pyx_L1_error); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float32); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_t_6, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_imRad = __pyx_t_8; __pyx_t_8.memview = NULL; __pyx_t_8.data = NULL;
078:
079: cdef int p
+080: for p in range(nFrames):
__pyx_t_12 = __pyx_v_nFrames;
__pyx_t_11 = __pyx_t_12;
for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_11; __pyx_t_1+=1) {
__pyx_v_p = __pyx_t_1;
+081: self._single_frame_RGC_map(imRaw[p,:,:], imRad[p,:,:], imInt[p,:,:], imIntGx[p,:,:], imIntGy[p,:,:])
__pyx_t_22.data = __pyx_v_imRaw.data;
__pyx_t_22.memview = __pyx_v_imRaw.memview;
__PYX_INC_MEMVIEW(&__pyx_t_22, 1);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_p;
Py_ssize_t __pyx_tmp_stride = __pyx_v_imRaw.strides[0];
__pyx_t_22.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_22.shape[0] = __pyx_v_imRaw.shape[1];
__pyx_t_22.strides[0] = __pyx_v_imRaw.strides[1];
__pyx_t_22.suboffsets[0] = -1;
__pyx_t_22.shape[1] = __pyx_v_imRaw.shape[2];
__pyx_t_22.strides[1] = __pyx_v_imRaw.strides[2];
__pyx_t_22.suboffsets[1] = -1;
__pyx_t_23.data = __pyx_v_imRad.data;
__pyx_t_23.memview = __pyx_v_imRad.memview;
__PYX_INC_MEMVIEW(&__pyx_t_23, 1);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_p;
Py_ssize_t __pyx_tmp_stride = __pyx_v_imRad.strides[0];
__pyx_t_23.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_23.shape[0] = __pyx_v_imRad.shape[1];
__pyx_t_23.strides[0] = __pyx_v_imRad.strides[1];
__pyx_t_23.suboffsets[0] = -1;
__pyx_t_23.shape[1] = __pyx_v_imRad.shape[2];
__pyx_t_23.strides[1] = __pyx_v_imRad.strides[2];
__pyx_t_23.suboffsets[1] = -1;
__pyx_t_24.data = __pyx_v_imInt.data;
__pyx_t_24.memview = __pyx_v_imInt.memview;
__PYX_INC_MEMVIEW(&__pyx_t_24, 1);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_p;
Py_ssize_t __pyx_tmp_stride = __pyx_v_imInt.strides[0];
__pyx_t_24.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_24.shape[0] = __pyx_v_imInt.shape[1];
__pyx_t_24.strides[0] = __pyx_v_imInt.strides[1];
__pyx_t_24.suboffsets[0] = -1;
__pyx_t_24.shape[1] = __pyx_v_imInt.shape[2];
__pyx_t_24.strides[1] = __pyx_v_imInt.strides[2];
__pyx_t_24.suboffsets[1] = -1;
__pyx_t_25.data = __pyx_v_imIntGx.data;
__pyx_t_25.memview = __pyx_v_imIntGx.memview;
__PYX_INC_MEMVIEW(&__pyx_t_25, 1);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_p;
Py_ssize_t __pyx_tmp_stride = __pyx_v_imIntGx.strides[0];
__pyx_t_25.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_25.shape[0] = __pyx_v_imIntGx.shape[1];
__pyx_t_25.strides[0] = __pyx_v_imIntGx.strides[1];
__pyx_t_25.suboffsets[0] = -1;
__pyx_t_25.shape[1] = __pyx_v_imIntGx.shape[2];
__pyx_t_25.strides[1] = __pyx_v_imIntGx.strides[2];
__pyx_t_25.suboffsets[1] = -1;
__pyx_t_26.data = __pyx_v_imIntGy.data;
__pyx_t_26.memview = __pyx_v_imIntGy.memview;
__PYX_INC_MEMVIEW(&__pyx_t_26, 1);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_p;
Py_ssize_t __pyx_tmp_stride = __pyx_v_imIntGy.strides[0];
__pyx_t_26.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_26.shape[0] = __pyx_v_imIntGy.shape[1];
__pyx_t_26.strides[0] = __pyx_v_imIntGy.strides[1];
__pyx_t_26.suboffsets[0] = -1;
__pyx_t_26.shape[1] = __pyx_v_imIntGy.shape[2];
__pyx_t_26.strides[1] = __pyx_v_imIntGy.strides[2];
__pyx_t_26.suboffsets[1] = -1;
((struct __pyx_vtabstruct_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence *)__pyx_v_self->__pyx_vtab)->_single_frame_RGC_map(__pyx_v_self, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 81, __pyx_L1_error)
__PYX_XCLEAR_MEMVIEW(&__pyx_t_22, 1);
__pyx_t_22.memview = NULL; __pyx_t_22.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_23, 1);
__pyx_t_23.memview = NULL; __pyx_t_23.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_24, 1);
__pyx_t_24.memview = NULL; __pyx_t_24.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_25, 1);
__pyx_t_25.memview = NULL; __pyx_t_25.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_26, 1);
__pyx_t_26.memview = NULL; __pyx_t_26.data = NULL;
}
082:
+083: return imRad, imInt, imIntGx, imIntGy
__Pyx_XDECREF(__pyx_r); __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_imRad, 3, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 83, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_imInt, 3, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 83, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __pyx_memoryview_fromslice(__pyx_v_imIntGx, 3, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 83, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_imIntGy, 3, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 83, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 83, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_6); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6)) __PYX_ERR(0, 83, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7)) __PYX_ERR(0, 83, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_9); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_9)) __PYX_ERR(0, 83, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_5); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_5)) __PYX_ERR(0, 83, __pyx_L1_error); __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_9 = 0; __pyx_t_5 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
084:
085:
+086: cdef void _single_frame_RGC_map(self, float[:,:] imRaw, float[:,:] imRad, float[:,:] imInt, float[:,:] imIntGx, float[:,:] imIntGy):
static void __pyx_f_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence__single_frame_RGC_map(struct __pyx_obj_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence *__pyx_v_self, __Pyx_memviewslice __pyx_v_imRaw, __Pyx_memviewslice __pyx_v_imRad, __Pyx_memviewslice __pyx_v_imInt, __Pyx_memviewslice __pyx_v_imIntGx, __Pyx_memviewslice __pyx_v_imIntGy) {
int __pyx_v_w;
int __pyx_v_h;
int __pyx_v_yM;
int __pyx_v_xM;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_single_frame_RGC_map", 0);
/* … */
/* function exit code */
__Pyx_RefNannyFinishContext();
}
+087: cdef int w = imRaw.shape[1]
__pyx_v_w = (__pyx_v_imRaw.shape[1]);
+088: cdef int h = imRaw.shape[0]
__pyx_v_h = (__pyx_v_imRaw.shape[0]);
089: cdef int yM, xM
090:
+091: with nogil:
{
#ifdef WITH_THREAD
PyThreadState *_save;
_save = NULL;
Py_UNBLOCK_THREADS
__Pyx_FastGIL_Remember();
#endif
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
#ifdef WITH_THREAD
__Pyx_FastGIL_Forget();
Py_BLOCK_THREADS
#endif
goto __pyx_L5;
}
__pyx_L5:;
}
}
+092: for yM in prange(self.magnification*2, h * self.magnification - self.magnification*2):
__pyx_t_1 = (__pyx_v_self->magnification * 2);
__pyx_t_2 = ((__pyx_v_h * __pyx_v_self->magnification) - (__pyx_v_self->magnification * 2));
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_4 = (__pyx_t_2 - __pyx_t_1 + 1 - 1/abs(1)) / 1;
if (__pyx_t_4 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for lastprivate(__pyx_v_xM) firstprivate(__pyx_v_yM) lastprivate(__pyx_v_yM)
#endif /* _OPENMP */
for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_4; __pyx_t_3++){
{
__pyx_v_yM = (int)(__pyx_t_1 + 1 * __pyx_t_3);
/* Initialize private variables to invalid values */
__pyx_v_xM = ((int)0xbad0bad0);
+093: for xM in range(self.magnification*2, w * self.magnification - self.magnification*2):
__pyx_t_5 = ((__pyx_v_w * __pyx_v_self->magnification) - (__pyx_v_self->magnification * 2));
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = (__pyx_v_self->magnification * 2); __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_xM = __pyx_t_7;
+094: if self.doIntensityWeighting:
if (__pyx_v_self->doIntensityWeighting) {
/* … */
goto __pyx_L12;
}
+095: imRad[yM, xM] = _c_calculate_rgc(xM, yM, &imIntGx[0,0], &imIntGy[0,0], w * self.magnification, h * self.magnification, self.magnification, Gx_Gy_MAGNIFICATION, self.fwhm, self.tSO, self.tSS, self.sensitivity) * imInt[yM, xM]
__pyx_t_8 = 0;
__pyx_t_9 = 0;
__pyx_t_10 = 0;
__pyx_t_11 = 0;
__pyx_t_12 = __pyx_v_yM;
__pyx_t_13 = __pyx_v_xM;
__pyx_t_14 = __pyx_v_yM;
__pyx_t_15 = __pyx_v_xM;
*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imRad.data + __pyx_t_14 * __pyx_v_imRad.strides[0]) ) + __pyx_t_15 * __pyx_v_imRad.strides[1]) )) = (_c_calculate_rgc(__pyx_v_xM, __pyx_v_yM, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imIntGx.data + __pyx_t_8 * __pyx_v_imIntGx.strides[0]) ) + __pyx_t_9 * __pyx_v_imIntGx.strides[1]) )))), (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imIntGy.data + __pyx_t_10 * __pyx_v_imIntGy.strides[0]) ) + __pyx_t_11 * __pyx_v_imIntGy.strides[1]) )))), (__pyx_v_w * __pyx_v_self->magnification), (__pyx_v_h * __pyx_v_self->magnification), __pyx_v_self->magnification, __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION, __pyx_v_self->fwhm, __pyx_v_self->tSO, __pyx_v_self->tSS, __pyx_v_self->sensitivity) * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imInt.data + __pyx_t_12 * __pyx_v_imInt.strides[0]) ) + __pyx_t_13 * __pyx_v_imInt.strides[1]) ))));
096: #imRad[yM, xM] = self._calculateRGC(xM, yM, imIntGx, imIntGy, imInt) * imInt[yM, xM]
097: else:
+098: imRad[yM, xM] = _c_calculate_rgc(xM, yM, &imIntGx[0,0], &imIntGy[0,0], w * self.magnification, h * self.magnification, self.magnification, Gx_Gy_MAGNIFICATION, self.fwhm, self.tSO, self.tSS, self.sensitivity)
/*else*/ {
__pyx_t_13 = 0;
__pyx_t_12 = 0;
__pyx_t_11 = 0;
__pyx_t_10 = 0;
__pyx_t_9 = __pyx_v_yM;
__pyx_t_8 = __pyx_v_xM;
*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imRad.data + __pyx_t_9 * __pyx_v_imRad.strides[0]) ) + __pyx_t_8 * __pyx_v_imRad.strides[1]) )) = _c_calculate_rgc(__pyx_v_xM, __pyx_v_yM, (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imIntGx.data + __pyx_t_13 * __pyx_v_imIntGx.strides[0]) ) + __pyx_t_12 * __pyx_v_imIntGx.strides[1]) )))), (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imIntGy.data + __pyx_t_11 * __pyx_v_imIntGy.strides[0]) ) + __pyx_t_10 * __pyx_v_imIntGy.strides[1]) )))), (__pyx_v_w * __pyx_v_self->magnification), (__pyx_v_h * __pyx_v_self->magnification), __pyx_v_self->magnification, __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION, __pyx_v_self->fwhm, __pyx_v_self->tSO, __pyx_v_self->tSS, __pyx_v_self->sensitivity);
}
__pyx_L12:;
}
}
}
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
099:
100:
+101: cdef float _calculateRGC(self, int xM, int yM, float[:,:] imIntGx, float[:,:] imIntGy, float[:,:] imInt) nogil:
static float __pyx_f_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_25RadialGradientConvergence__calculateRGC(struct __pyx_obj_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_RadialGradientConvergence *__pyx_v_self, int __pyx_v_xM, int __pyx_v_yM, __Pyx_memviewslice __pyx_v_imIntGx, __Pyx_memviewslice __pyx_v_imIntGy, __Pyx_memviewslice __pyx_v_imInt) {
int __pyx_v_w;
int __pyx_v_h;
float __pyx_v_vx;
float __pyx_v_vy;
float __pyx_v_Gx;
float __pyx_v_Gy;
float __pyx_v_dx;
float __pyx_v_dy;
float __pyx_v_distance;
float __pyx_v_distanceWeight;
float __pyx_v_GdotR;
float __pyx_v_Dk;
float __pyx_v_xc;
float __pyx_v_yc;
float __pyx_v_RGC;
float __pyx_v_distanceWeightSum;
int __pyx_v__start;
int __pyx_v__end;
int __pyx_v_i;
int __pyx_v_j;
float __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
102:
+103: cdef int w = imInt.shape[1]
__pyx_v_w = (__pyx_v_imInt.shape[1]);
+104: cdef int h = imInt.shape[0]
__pyx_v_h = (__pyx_v_imInt.shape[0]);
105:
106: cdef float vx, vy, Gx, Gy
107:
108: cdef float dx, dy
109: cdef float distance, distanceWeight, GdotR, Dk
110:
+111: cdef float xc = (xM + 0.5) / self.magnification # subpixel in the centre
__pyx_v_xc = ((__pyx_v_xM + 0.5) / ((double)__pyx_v_self->magnification));
+112: cdef float yc = (yM + 0.5) / self.magnification # subpixel in the centre
__pyx_v_yc = ((__pyx_v_yM + 0.5) / ((double)__pyx_v_self->magnification));
113:
+114: cdef float RGC = 0 # Radial Gradient Convergence
__pyx_v_RGC = 0.0;
+115: cdef float distanceWeightSum = 0
__pyx_v_distanceWeightSum = 0.0;
116:
+117: cdef int _start = -(<int>(Gx_Gy_MAGNIFICATION * self.fwhm))
__pyx_v__start = (-((int)(__pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION * __pyx_v_self->fwhm)));
+118: cdef int _end = <int>(Gx_Gy_MAGNIFICATION * self.fwhm + 1)
__pyx_v__end = ((int)((__pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION * __pyx_v_self->fwhm) + 1.0));
119:
120: cdef int i, j
121:
+122: for j in range(_start, _end):
__pyx_t_1 = __pyx_v__end;
__pyx_t_2 = __pyx_t_1;
for (__pyx_t_3 = __pyx_v__start; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
__pyx_v_j = __pyx_t_3;
+123: vy = (<int>(Gx_Gy_MAGNIFICATION * yc) + j) / Gx_Gy_MAGNIFICATION # position in continuous space
__pyx_v_vy = (((float)(((int)(__pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION * __pyx_v_yc)) + __pyx_v_j)) / __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION);
124:
+125: if 0 < vy <= h - 1:
__pyx_t_4 = (0.0 < __pyx_v_vy);
if (__pyx_t_4) {
__pyx_t_4 = (__pyx_v_vy <= (__pyx_v_h - 1));
}
if (__pyx_t_4) {
/* … */
}
}
126:
+127: for i in range(_start, _end):
__pyx_t_5 = __pyx_v__end;
__pyx_t_6 = __pyx_t_5;
for (__pyx_t_7 = __pyx_v__start; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_i = __pyx_t_7;
+128: vx = (<int>(Gx_Gy_MAGNIFICATION * xc) + i) / Gx_Gy_MAGNIFICATION # position in continuous space
__pyx_v_vx = (((float)(((int)(__pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION * __pyx_v_xc)) + __pyx_v_i)) / __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION);
129:
+130: if 0 < vx <= w - 1:
__pyx_t_4 = (0.0 < __pyx_v_vx);
if (__pyx_t_4) {
__pyx_t_4 = (__pyx_v_vx <= (__pyx_v_w - 1));
}
if (__pyx_t_4) {
/* … */
}
}
131:
+132: dx = vx - xc
__pyx_v_dx = (__pyx_v_vx - __pyx_v_xc);
+133: dy = vy - yc
__pyx_v_dy = (__pyx_v_vy - __pyx_v_yc);
+134: distance = sqrt(dx * dx + dy * dy)
__pyx_v_distance = sqrt(((__pyx_v_dx * __pyx_v_dx) + (__pyx_v_dy * __pyx_v_dy)));
135:
+136: if distance != 0 and distance <= self.tSO:
__pyx_t_8 = (__pyx_v_distance != 0.0);
if (__pyx_t_8) {
} else {
__pyx_t_4 = __pyx_t_8;
goto __pyx_L10_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_distance <= __pyx_v_self->tSO);
__pyx_t_4 = __pyx_t_8;
__pyx_L10_bool_binop_done:;
if (__pyx_t_4) {
/* … */
}
137:
+138: Gx = imIntGx[<int>((vy)*self.magnification*Gx_Gy_MAGNIFICATION), <int>((vx)*self.magnification*Gx_Gy_MAGNIFICATION)]
__pyx_t_9 = ((int)((__pyx_v_vy * __pyx_v_self->magnification) * __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION));
__pyx_t_10 = ((int)((__pyx_v_vx * __pyx_v_self->magnification) * __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION));
__pyx_v_Gx = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imIntGx.data + __pyx_t_9 * __pyx_v_imIntGx.strides[0]) ) + __pyx_t_10 * __pyx_v_imIntGx.strides[1]) )));
+139: Gy = imIntGy[<int>((vy)*self.magnification*Gx_Gy_MAGNIFICATION), <int>((vx)*self.magnification*Gx_Gy_MAGNIFICATION)]
__pyx_t_10 = ((int)((__pyx_v_vy * __pyx_v_self->magnification) * __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION));
__pyx_t_9 = ((int)((__pyx_v_vx * __pyx_v_self->magnification) * __pyx_v_7nanopyx_4core_9transform_30sr_radial_gradient_convergence_Gx_Gy_MAGNIFICATION));
__pyx_v_Gy = (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imIntGy.data + __pyx_t_10 * __pyx_v_imIntGy.strides[0]) ) + __pyx_t_9 * __pyx_v_imIntGy.strides[1]) )));
140:
141: #distanceWeight = self._calculateDW(distance)
+142: distanceWeight = _c_calculate_dw(distance, self.tSS)
__pyx_v_distanceWeight = _c_calculate_dw(__pyx_v_distance, __pyx_v_self->tSS);
+143: distanceWeightSum += distanceWeight
__pyx_v_distanceWeightSum = (__pyx_v_distanceWeightSum + __pyx_v_distanceWeight);
+144: GdotR = Gx*dx + Gy*dy
__pyx_v_GdotR = ((__pyx_v_Gx * __pyx_v_dx) + (__pyx_v_Gy * __pyx_v_dy));
145:
+146: if GdotR < 0: # if the vector is pointing inwards
__pyx_t_4 = (__pyx_v_GdotR < 0.0);
if (__pyx_t_4) {
/* … */
}
+147: Dk = _c_calculate_dk(Gx, Gy, dx, dy, distance)
__pyx_v_Dk = _c_calculate_dk(__pyx_v_Gx, __pyx_v_Gy, __pyx_v_dx, __pyx_v_dy, __pyx_v_distance);
148: # Dk = self._calculateDk(Gx, Gy, dx, dy, distance)
+149: RGC += Dk * distanceWeight
__pyx_v_RGC = (__pyx_v_RGC + (__pyx_v_Dk * __pyx_v_distanceWeight));
150:
+151: RGC /= distanceWeightSum
__pyx_v_RGC = (__pyx_v_RGC / __pyx_v_distanceWeightSum);
152:
+153: if RGC >= 0 and self.sensitivity > 1:
__pyx_t_8 = (__pyx_v_RGC >= 0.0);
if (__pyx_t_8) {
} else {
__pyx_t_4 = __pyx_t_8;
goto __pyx_L14_bool_binop_done;
}
__pyx_t_8 = (__pyx_v_self->sensitivity > 1.0);
__pyx_t_4 = __pyx_t_8;
__pyx_L14_bool_binop_done:;
if (__pyx_t_4) {
/* … */
goto __pyx_L13;
}
+154: RGC = RGC ** self.sensitivity
__pyx_v_RGC = powf(__pyx_v_RGC, __pyx_v_self->sensitivity);
+155: elif RGC < 0:
__pyx_t_4 = (__pyx_v_RGC < 0.0);
if (__pyx_t_4) {
/* … */
}
__pyx_L13:;
+156: RGC = 0
__pyx_v_RGC = 0.0;
157:
+158: return RGC
__pyx_r = __pyx_v_RGC; goto __pyx_L0;